#include <stdio.h>
#include <stdlib.h>
#include <inttypes.h>
#include <unistd.h>
// 数组，属于复合数据类型。
// 数组使用连续空间保存多个同一类型的变量。
#define ARRAR_MAX_SIZE (5)
int main(int argc, char **argv)
{
    // 数组定义， a为数组名。s
    // 这里定义sizeof(char) * ARRAR_MAX_SIZE的内存空间，来保存ARRAR_MAX_SIZE个char类型的变量！
    // a表示有ARRAR_MAX_SIZE个成员。每个成员为char类型。
    char a[ARRAR_MAX_SIZE];
    // char a[ARRAR_MAX_SIZE] = {1, 2, 3, 4, 5};定义时初始化每一个变量。
    // 比如，这里a的成员个数ARRAR_MAX_SIZE为5，每个成员为char类型，占内存空间为sizeof(char) * ARRAR_MAX_SIZE = ARRAR_MAX_SIZE字节。
    for (int i = 0 /*c99, for 循环结束，释放*/; i < ARRAR_MAX_SIZE; i++)
    {
        // 对每个成员进行赋值，循环ARRAR_MAX_SIZE次，也就是成员个数！
        // 1.c语言以第0个成员开始。这里赋值为0-4成员，共5个成员。
        // 2.如果使用a[ARRAR_MAX_SIZE] = 6;越界写入内存，一定是错误写法，可能崩溃.
        // 3.即便是 int b = a[ARRAR_MAX_SIZE];越界读取内存，也一定是错误的写法，也可能导致崩溃。
        // 4.访问第n个成员，我们写为 a[n].
        a[i] = i + 1; // 对数组成员赋值
        // *(a + i) = 1;// 第二种赋值方式。这里(a + i)是第i个成员的地址。由于现在还没有讲指针，暂缓。
    }

    {
        // 必须禁止这样越界赋值。虽然可能不报错，不崩溃！！！！！
        a[ARRAR_MAX_SIZE] = ARRAR_MAX_SIZE + 1;
    }

    for (int i = 0 /*c99, for 循环结束，释放*/; i < ARRAR_MAX_SIZE; i++)
    {
        printf("[%s,%d]a[%d]=%d\n", __FILE__, __LINE__, i, a[i]); // 读取数组成员的值。
    }

    {
        // 必须禁止这样越界读取。虽然可能不报错，不崩溃！！！！
        printf("[%s,%d]a[%d]=%d\n", __FILE__, __LINE__, ARRAR_MAX_SIZE, a[ARRAR_MAX_SIZE]);
    }

    return 1;
}
